package com.xiaoshuidi.cloud.module.contract.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 账单 Base VO，提供给添加、修改、详细的子 VO 使用
 * 如果子 VO 存在差异的字段，请不要添加到这里，影响 Swagger 文档生成
 */
@Data
@Accessors(chain = true)
public class RentOrderSowTicketVO {
    /**
     * 用于财务流水的主键
     */
    @Schema(description = "用于财务流水的主键")
    private String uuid;

    /**
     * 账单编号
     */
    @Schema(description = "账单编号")
    private String orderNo;

    /**
     * 序号
     */
    @Schema(description = "序号", required = true)
    private Long num;

    /**
     * 支付流水号
     */
    @Schema(description = "支付流水号")
    private String tradeSerialNo;

    /**
     * 业务id 如 合同id 、预定id
     */
    @Schema(description = "业务id 如 合同id 、预定id", required = true)
    @NotNull(message = "业务id 如 合同id 、预定id不能为空")
    private Long businessId;

    /**
     * 公寓id
     */
    @Schema(description = "公寓id", required = true)
    @NotNull(message = "公寓id不能为空")
    private Long apartmentId;

    /**
     * 公寓名称
     */
    @Schema(description = "公寓名称")
    private String apartmentName;

    /**
     * 房间id
     */
    @Schema(description = "房间id")
    private Long roomId;

    /**
     * 房间名称
     */
    @Schema(description = "房间名称")
    private String roomName;

    /**
     * 此订单开始时间
     */
    @Schema(description = "此订单开始时间")
    private LocalDate startTime;

    /**
     * 此订单结束时间
     */
    @Schema(description = "此订单结束时间")
    private LocalDate endTime;

    /**
     * 账单总金额
     */
    private BigDecimal totalAmount;

    /**
     * 杂费金额
     */
    @Schema(description = "杂费金额", required = true)
    private BigDecimal extrasAmount = BigDecimal.ZERO;

    /**
     * 支付状态(unpaid 待支付 |payment 已支付|part  部分支付),
     */
    @Schema(description = "支付状态(unpaid 待支付 |payment 已支付|part  部分支付),", required = true)
    @NotNull(message = "支付状态(unpaid 待支付 |payment 已支付|part  部分支付),不能为空")
    private String payStatus;

    /**
     * 付款方式(0 alipay 支付宝 |1 dida 滴答付 |2 weixin 微信 |3 cash 现金 |4 bank 银行转账|5 system 系统标记为已支付|6 pos 线下POS |7 h2ome 水滴金融 |8 llian 连连支付 |9,  other 其他 |10 allinpay 银行卡在线支付|11 allinpaywx 微信在线支付|12 allinpayh5 银行卡小额支付 |13 pinganwx 微信支付 |14 daikou 银行代扣|15 ldpay 快捷支付|16 ldalipay 支付宝支付,
     */
    @Schema(description = "付款方式(0 alipay 支付宝 |1 dida 滴答付 |2 weixin 微信 |3 cash 现金 |4 bank 银行转账|5 system 系统标记为已支付|6 pos 线下POS |7 h2ome 水滴金融 |8 llian 连连支付 |9,  other 其他 |10 allinpay 银行卡在线支付|11 allinpaywx 微信在线支付|12 allinpayh5 银行卡小额支付 |13 pinganwx 微信支付 |14 daikou 银行代扣|15 ldpay 快捷支付|16 ldalipay 支付宝支付,")
    private String payMethod;

    /**
     * 此订单支付时间
     */
    @Schema(description = "此订单支付时间", required = true)
    @NotNull(message = "此订单支付时间不能为空")
    private LocalDate oughtPayTime;

    /**
     * 此订单最晚支付时间
     */
    @Schema(description = "此订单最晚支付时间", required = true)
    @NotNull(message = "此订单最晚支付时间不能为空")
    private LocalDate deadlinePayTime;

    /**
     * 此订单实际支付时间
     */
    @Schema(description = "此订单实际支付时间")
    private LocalDateTime actualPayTime;

    /**
     * 结算状态(0, 未结算|1, 已结算),
     */
    @Schema(description = "结算状态(0, 未结算|1, 已结算),", required = true)
    @NotNull(message = "结算状态(0, 未结算|1, 已结算),不能为空")
    private Integer payOutStatus;

    /**
     * 审批状态(notReview  无需审核|inReview 审核中|effective 已生效|(reject 已驳回)
     */
    @Schema(description = "审批状态(notReview  无需审核|inReview 审核中|effective 已生效|(reject 已驳回)", required = true)
    @NotNull(message = "审批状态(notReview  无需审核|inReview 审核中|effective 已生效|(reject 已驳回)不能为空")
    private String approvedStatus;

    /**
     * 账单类型 default 合同账单| custom 杂费账单| free  免租期账单| meter  抄表账单| carry 结转账单 | owner 业主账单
     */
    @Schema(description = "账单类型 default 合同账单| custom 杂费账单| free  免租期账单| meter  抄表账单| carry 结转账单 | owner 业主账单", required = true)
    @NotNull(message = "账单类型 default 合同账单| custom 杂费账单| free  免租期账单| meter  抄表账单| carry 结转账单 | owner 业主账单不能为空")
    private String orderType;

    /**
     * 支付次数
     */
    @Schema(description = "支付次数", required = true)
    @NotNull(message = "支付次数不能为空")
    private Integer payTimes;

    /**
     * 是否已清算
     */
    @Schema(description = "是否已清算", required = true)
    @NotNull(message = "是否已清算不能为空")
    private Integer cleared;

    /**
     * 手机号
     */
    @Schema(description = "手机号")
    private String phone;

    /**
     * 核销状态
     */
    @Schema(description = "核销状态")
    private Integer writeOffStatus;

    /**
     * 付款人
     */
    @Schema(description = "付款人")
    private String payer;

    /**
     * 电子发票开票状态
     */
    @Schema(description = "电子发票开票状态 ", required = true)
    @NotNull(message = "电子发票开票状态 不能为空")
    private Integer invoiceStatus;

    /**
     * 收款备注
     */
    @Schema(description = "收款备注")
    private String receivePaymentComments;

    /**
     * 备注
     */
    @Schema(description = "备注")
    private String remark;

    /**
     * 工单id
     */
    @Schema(description = "工单id")
    private Long sowTicketId;
}
